const path = require('path');
const fs = require('fs');

const isDevelopment = process.env.NODE_ENV === 'development';
const isDebug = process.env.LOG_DEBUG === 'true';

/**
 * 获取根路径（适配 pkg）
 * @returns {string} 项目根路径
 */
function getRootPath() {
  return process.cwd();
}

/**
 * 构建日志文件路径
 * @param {string} logDirectory 日志根目录
 * @param {string} level 日志级别
 * @param {Date} date 日期
 * @returns {string} 日志文件完整路径
 */
function buildLogPath(logDirectory, level, date) {
  const year = String(date.getFullYear());
  const month = String(date.getMonth() + 1).padStart(2, '0'); // 月份从 0 开始
  const day = String(date.getDate()).padStart(2, '0');
  const dateStr = `${year}-${month}-${day}`;

  // 区分 log 和 log2
  if (logDirectory.includes('logs2')) {
    // logs2/info/2025/01/2025-01-01_info.log
    return path.join(logDirectory, level, year, month, `${dateStr}_${level}.log`);
  } else {
    // logs/2025/01/01/2025-01-01_info.log
    return path.join(logDirectory, year, month, day, `${dateStr}_${level}.log`);
  }
}

/**
 * 确保目录存在，如果不存在则创建
 * @param {string} directory 目录路径
 */
function ensureDirectoryExists(directory) {
  try {
    fs.mkdirSync(directory, { recursive: true });
  } catch (err) {
    
    if (isDevelopment || isDebug) {
      console.error(`创建目录失败: ${err}`);
    }
  }
}

/**
 * 从文件名中提取日期
 * @param {string} filename 文件名
 * @returns {Date|null} 提取的日期对象，如果无法提取则返回null
 */
function getDateFromFilename(filename) {
  // 匹配格式：2025-09-11_debug.log 或 2025-09-11_info.log.gz
  const dateMatch = filename.match(/^(\d{4}-\d{2}-\d{2})_/);
  if (dateMatch) {
    try {
      return new Date(dateMatch[1]);
    } catch (err) {
      return null;
    }
  }
  return null;
}

module.exports = {
  getRootPath,
  buildLogPath,
  ensureDirectoryExists,
  getDateFromFilename
};